package com.dev.security.shiro;


import com.dev.security.util.PasswordHash;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

/**
 * 密码校验
 *
 * @ Author：across-cai
 * @ Time：2020/4/17 16:06
 * @ Motto：我只想做你的太阳
 */

public class CredentialsMatcher extends SimpleCredentialsMatcher {

    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        //用户名，密码，来自于用户输入
        UsernamePasswordToken uToken = (UsernamePasswordToken) token;
        String inPassword = new String(uToken.getPassword());

        //来自于数据库存储
        //AuthenticationInfo info

        //比较逻辑：需要先对用户输入的密码进行加密，然后使用加密后的密码跟存储的密码进行比较
        //但是我们使用的 PBKDF2 密码，即使是同一个密码，每次加密后都不一样
        //在这种情况下，这个加密算法提供了一个 match 方法，他会完成原文密码与加密密码的比较

        //获得数据库中的密码
        String dbPassword = (String) info.getCredentials();

        System.err.println("inPassword:" + inPassword);
        System.err.println("dbPassword:" + dbPassword);

        //进行密码的比对
        boolean flag = PasswordHash.validatePassword(inPassword,dbPassword);


        return flag;
        //return super.doCredentialsMatch(token, info);
    }
}
